const config = require('./config.js')
const shell = require('shelljs')
const path = require('path')
const Client = require('ssh2-sftp-client')
console.log('开始上传文件')

// 打包npm run build
const compileDist = async () => {
  if (shell.exec('npm run build').code === 0) {
    console.log('打包成功')
  }
}
async function connectShell () {
  config.map(item => { // 遍历
    const sftp = new Client()
    sftp.connect({ // 连接服务器
      host: item.ip, // 服务器 IP  ssh地址
      port: item.port, // ssh端口号
      username: item.username, // ssh 用户名
      password: item.password
    }).then(() => {
      console.log('先执行拉下文件备份')
      // 第一个参数为拉取的路径，第二个参数为保存在本地的文件夹路径
      return sftp.downloadDir(item.path, path.resolve('__dirname', `../dist1/${new Date().getTime()}`))// path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。
    }).then(() => {
      console.log('执行删除文件')
      // 删除服务器文件的路径
      return sftp.rmdir(item.path, true)
    }).then(() => {
      console.log('执行上传文件')
      // 第一个参数为本地上传文件路径，第二个为上传到服务器的路径
      return sftp.uploadDir(path.resolve('__dirname', '../dist'), item.path)
    }).then(() => {
      console.log('上传完成')
      sftp.end()
    }).catch((err) => {
      console.log(err, '上传失败')
      sftp.end()
    })
  })
}
async function runStart () {
  await compileDist()// 等待打包成功
  await connectShell()// 提交上传文件
}
runStart()
